#include <iostream>

using namespace std;

/*
 * 栈区， 程序运行之后才会有，由编译器自动分配和释放，储存函数的参数值，局部变量
 *  注；
 *      不要返回局部变量的地址
 *
 * 堆区： 程勋运行之后才会有，由程序员分配释放，未释放的内存在程序结束时由操作系统回收
 *      利用 new 在堆区开辟内存，利用delete释放内存  delete 变量地址
 */

int* test1() {
    int a = 10;
    return &a;
}

int* test2(){
    // 此处指针也是一个局部变量，放在栈上，指针保存的数据是放在堆区
    int * a = new int(11);   // 返回的是一个地址

    return a;
}

int main() {
    int * p2 = test2();
    cout << *p2 <<endl;

    delete p2;  // 释放变量

    int * arr = new int[10];  // 开辟数组
    delete[] arr;  // 释放数组

    int * p = test1();
    cout << *p << endl;

    return 0;
}
